home *** CD-ROM | disk | FTP | other *** search
- /*******************************************************************************
- * *
- * MODULE : Print.c *
- * *
- * DESCRIPTION : Routines used for printing. *
- * *
- * FUNCTIONS : GetPrinterDC() - Gets default printer from WIN.INI and *
- * creates a DC for it. *
- * *
- * InitPrinting() - Initializes print job. *
- * *
- * TermPrinting() - Terminates print job. *
- * *
- * PrintDlgProc() - Dialog function for the "Cancel Printing" *
- * dialog. *
- * *
- * AbortProc() - Peeks at message queue for messages from *
- * the print dialog. *
- * *
- *******************************************************************************/
- // COPYRIGHT:
- //
- // (C) Copyright Microsoft Corp. 1992. All rights reserved.
- //
- // You have a royalty-free right to use, modify, reproduce and
- // distribute the Sample Files (and/or any modified version) in
- // any way you find useful, provided that you agree that
- // Microsoft has no warranty obligations or liability for any
- // Sample Application Files which are modified.
- #include <windows.h>
- #include <string.h>
- #include "showdib.h"
-
- FARPROC lpfnAbortProc = NULL;
-
- FARPROC lpfnPrintDlgProc = NULL;
-
- HWND hWndParent = NULL;
-
- HWND hDlgPrint = NULL;
-
- BOOL bError;
-
- BOOL bUserAbort;
-
-
- BOOL FAR PASCAL AbortProc (HDC, short);
- BOOL FAR PASCAL PrintDlgProc (HWND, unsigned, WORD, DWORD);
- #pragma alloc_text(_PRINT, AbortProc, PrintDlgProc)
-
- /****************************************************************************
- * *
- * FUNCTION : GetPrinterDC() *
- * *
- * PURPOSE : Read WIN.INI for default printer and create a DC for it. *
- * *
- * RETURNS : A handle to the DC if successful or NULL otherwise. *
- * *
- ****************************************************************************/
-
-
- HDC PASCAL GetPrinterDC ()
- {
- static char szPrinter[80];
- char *szDevice, *szDriver, *szOutput;
-
- GetProfileString("windows", "device", "", szPrinter, sizeof(szPrinter));
- if ((szDevice = strtok(szPrinter, ",")) && (szDriver = strtok(NULL, ", "))
- && (szOutput = strtok(NULL, ", ")))
- return CreateDC(szDriver, szDevice, szOutput, NULL);
- return NULL;
- }
- /****************************************************************************
- * *
- * FUNCTION : InitPrinting(HDC hDC, HWND hWnd, HANDLE hInst, LPSTR msg) *
- * *
- * PURPOSE : Makes preliminary driver calls to set up print job. *
- * *
- * RETURNS : TRUE - if successful. *
- * FALSE - otherwise. *
- * *
- ****************************************************************************/
-
-
- BOOL PASCAL InitPrinting (HDC hDC, HWND hWnd, HANDLE hInst, LPSTR msg)
- {
- bError = FALSE; /* no errors yet */
- bUserAbort = FALSE; /* user hasn't aborted */
- hWndParent = hWnd; /* save for Enable at Term time */
- lpfnPrintDlgProc = MakeProcInstance(PrintDlgProc, hInst);
- lpfnAbortProc = MakeProcInstance(AbortProc, hInst);
- hDlgPrint = CreateDialog(hInst, "PRTDLG", hWndParent, lpfnPrintDlgProc);
- if (!hDlgPrint)
- return FALSE;
- SetWindowText(hDlgPrint, msg);
- EnableWindow(hWndParent, FALSE); /* disable parent */
- if ((Escape(hDC, SETABORTPROC, 0, (LPSTR)lpfnAbortProc, NULL) > 0) && (
- Escape(hDC, STARTDOC, lstrlen(msg), msg, NULL) > 0))
- bError = FALSE;
- else
- bError = TRUE;
-
- /* might want to call the abort proc here to allow the user to
- * abort just before printing begins */
- return TRUE;
- }
- /****************************************************************************
- * *
- * FUNCTION : TermPrinting(HDC hDC) *
- * *
- * PURPOSE : Terminates print job. *
- * *
- ****************************************************************************/
-
-
- void PASCAL TermPrinting (HDC hDC)
- {
- if (!bError)
- Escape(hDC, ENDDOC, 0, NULL, NULL);
- if (bUserAbort)
- Escape(hDC, ABORTDOC, 0, NULL, NULL);
- else
- {
- EnableWindow(hWndParent, TRUE);
- DestroyWindow(hDlgPrint);
- }
- FreeProcInstance(lpfnAbortProc);
- FreeProcInstance(lpfnPrintDlgProc);
- }
- /****************************************************************************
- * *
- * FUNCTION :PrintDlgProc (HWND, unsigned , WORD , DWORD ) *
- * *
- * PURPOSE :Dialog function for the "Cancel Printing" dialog. It sets *
- * the abort flag if the user presses <Cancel>. *
- * *
- ****************************************************************************/
-
-
- BOOL FAR PASCAL PrintDlgProc (HWND hDlg, unsigned iMessage, WORD wParam, DWORD
- lParam)
- {
- switch (iMessage)
- {
- case WM_INITDIALOG:
- EnableMenuItem(GetSystemMenu(hDlg, FALSE), SC_CLOSE, MF_GRAYED);
- break;
-
- case WM_COMMAND:
- bUserAbort = TRUE;
- EnableWindow(hWndParent, TRUE);
- DestroyWindow(hDlg);
- hDlgPrint = 0;
- break;
-
- default:
- return FALSE;
- }
- return TRUE;
- }
-
- /****************************************************************************
- * *
- * FUNCTION :AbortProc (HDC hPrnDC, short nCode) *
- * *
- * PURPOSE :Checks message queue for messages from the "Cancel Printing"*
- * dialog. If it sees a message, (this will be from a print *
- * cancel command), it terminates. *
- * *
- * RETURNS :Inverse of Abort flag *
- * *
- ****************************************************************************/
-
-
- BOOL FAR PASCAL AbortProc (HDC hPrnDC, short nCode)
- {
- MSG msg;
-
- while (!bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
- {
- if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- return !bUserAbort;
- }
-